﻿using System;
using System.Runtime.Serialization;

namespace Kyoh.Lib.Component.Arguments
{
    /// <summary>引数が不正な区切り文字で定義されたことを表します。</summary>
    [Serializable]
    public class InvalidSeparatorException : InvalidArgumentException
    {
        /// <summary><see cref="InvalidSeparatorException"/> クラスの新しいインスタンスを初期化します。</summary>
        public InvalidSeparatorException() : base(ArgumentInvalidity.Separator) { }
        /// <summary><see cref="InvalidSeparatorException"/> クラスの新しいインスタンスを初期化します。</summary>
        /// <param name="message">エラーを説明するメッセージを指定します。</param>
        public InvalidSeparatorException(string message) : base(ArgumentInvalidity.Separator, message) { }
        /// <summary><see cref="InvalidSeparatorException"/> クラスの新しいインスタンスを初期化します。</summary>
        /// <param name="message">エラーを説明するメッセージを指定します。</param>
        /// <param name="inner">現在の例外の原因を表す例外を指定します。</param>
        public InvalidSeparatorException(string message, Exception inner) : base(ArgumentInvalidity.Separator, message, inner) { }

        /// <summary>シリアル化したデータを使用して、<see cref="InvalidSeparatorException"/> クラスの新しいインスタンスを初期化します。</summary>
        /// <param name="info">スローされている例外に関するシリアル化済みオブジェクト データを保持している <see cref="SerializationInfo"/></param>
        /// <param name="context">転送元または転送先に関するコンテキスト情報を含んでいる <see cref="StreamingContext"/></param>
        protected InvalidSeparatorException(SerializationInfo info, StreamingContext context) : base(info, context) { }

        /// <summary>定義に使用された区切り文字を表す文字列を取得・設定します。</summary>
        public string Separator { get; set; }
    }
}
